package com.jay.registry;

import com.jay.model.ServiceMetaInfo;

import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 注册中心服务本地缓存（支持多个服务）
 * 本类旨在提供一个本地缓存解决方案，用于快速读取和管理多个服务的元信息
 * 它通过ConcurrentHashMap来保证线程安全，支持并发操作
 */
public class RegistryServiceMultiCache {

    /**
     * 服务缓存
     * 使用ConcurrentHashMap来存储服务的元信息，确保线程安全
     * 键是服务的唯一键名，值是该服务的元信息列表
     */
    Map<String, List<ServiceMetaInfo>> serviceCache = new ConcurrentHashMap<>();

    /**
     * 写缓存
     * 将给定的服务键名和更新后的缓存列表写入服务缓存中
     *
     * @param serviceKey 服务键名，用于唯一标识一个服务
     * @param newServiceCache 更新后的缓存列表，包含该服务的元信息
     */
    void writeCache(String serviceKey, List<ServiceMetaInfo> newServiceCache) {
        this.serviceCache.put(serviceKey, newServiceCache);
    }

    /**
     * 读缓存
     * 根据服务键名从缓存中读取服务的元信息列表
     *
     * @param serviceKey 服务键名，用于查找缓存中的服务信息
     * @return 服务的元信息列表，如果未找到则返回null或空列表
     */
    List<ServiceMetaInfo> readCache(String serviceKey) {
        return this.serviceCache.get(serviceKey);
    }

    /**
     * 清空缓存
     * 从缓存中移除指定服务键名对应的服务元信息列表
     *
     * @param serviceKey 服务键名，用于指定要从缓存中移除的服务信息
     */
    void clearCache(String serviceKey) {
        this.serviceCache.remove(serviceKey);
    }
}
